Galileo Computing < openbook > Galileo Computing - Professionelle Bücher. Auch für Einsteiger.

...powered by www.netzwerkartist.de...

 <<   zurück
Visual Basic 2005 von Andreas Kühnel
Das umfassende Handbuch
Buch: Visual Basic 2005

Visual Basic 2005
1.233 S., mit 2 CDs, 59,90 Euro
Galileo Computing
ISBN 3-89842-585-1
gp Kapitel 4 Das Klassendesign (Teil 1)
  gp 4.1 Einführung in die Objektorientierung
    gp 4.1.1 Das objektorientierte Paradigma
    gp 4.1.2 Vorteile der objektorientierten Programmierung
    gp 4.1.3 Zusammenfassung
  gp 4.2 Die Klassendefinition
    gp 4.2.1 Die Deklaration von Objektvariablen
    gp 4.2.2 Zugriffsmodifizierer einer Klasse
    gp 4.2.3 Der Projekttyp »Klassenbibliothek«
    gp 4.2.4 Splitten einer Klassendefinition mit »Partial«
    gp 4.2.5 Zusammenfassung
  gp 4.3 Objektmethoden
    gp 4.3.1 Methoden mit Rückgabewert
    gp 4.3.2 Methoden ohne Rückgabewert
    gp 4.3.3 Der Aufruf einer Methode
    gp 4.3.4 Methoden mit Parameterliste
    gp 4.3.5 Rückgabewert einer Methode
    gp 4.3.6 Variablen in einer Methode
    gp 4.3.7 Zugriffsmodifizierer einer Methode
    gp 4.3.8 Referenz- und Wertparameter
    gp 4.3.9 Parameter, die Objektreferenzen erwarten
    gp 4.3.10 Methodenüberladung
    gp 4.3.11 Optionale Parameter
    gp 4.3.12 Zusammenfassung
  gp 4.4 Objekteigenschaften
    gp 4.4.1 Ergänzung der Klasse »Circle«
    gp 4.4.2 Lese- und schreibgeschützte Eigenschaften
    gp 4.4.3 Die Parameterliste einer Property-Prozedur
    gp 4.4.4 Standardeigenschaften
    gp 4.4.5 Das With ... End With-Statement
    gp 4.4.6 Konstanten mit »Const« und »ReadOnly«
    gp 4.4.7 Der Zugriff auf private Daten
    gp 4.4.8 Zusammenfassung
  gp 4.5 Konstruktoren
    gp 4.5.1 Die Konstruktoren in der Klasse »Circle«
    gp 4.5.2 Die Konstruktoraufrufe
    gp 4.5.3 Definition von Konstruktoren
    gp 4.5.4 »Friend«-Konstruktoren
    gp 4.5.5 »Private«-Konstruktoren
    gp 4.5.6 Konstruktorverkettung
    gp 4.5.7 Zusammenfassung
  gp 4.6 Der Destruktor
    gp 4.6.1 Das Zerstören von Objekten
    gp 4.6.2 Der Garbage Collector
    gp 4.6.3 Zusammenfassung
  gp 4.7 Arbeiten mit Objektreferenzen
    gp 4.7.1 Prüfen auf Initialisierung
    gp 4.7.2 Mehrere Referenzen auf ein Objekt
    gp 4.7.3 Typfeststellung einer Objektreferenz
    gp 4.7.4 Zusammenfassung


Galileo Computing

4.5 Konstruktoren  downtop

Konstruktoren sind Methoden, die der kontrollierten Initialisierung von Objekten dienen, z.  B. um den Feldern die erforderlichen Anfangswerte zuzuweisen, die Verbindung zu einer Datenbank aufzubauen oder eine Datei zu öffnen. Damit werden unzulässige Objektzustände vermieden, wenn einem Objekt nach Abschluss seiner Instanziierung substanzielle Startwerte fehlen.

Konstruktoren – auch als Initialisierungs- oder Erstellungsfunktionen bezeichnet – sind spezielle Methoden, die bei der Instanziierung einer Klasse automatisch aufgerufen werden.

Die Definition der Konstruktoren sieht wie folgt aus:


Zugriffsmodifizierer Sub New([Parameterliste])
End Sub

Zuerst wird ein Zugriffsmodifizierer angegeben, dahinter Sub New. Optional können Konstruktoren auch eine Parameterliste haben.


Galileo Computing

4.5.1 Die Konstruktoren in der Klasse »Circle«  downtop

Betrachten Sie das Beispiel der Klasse Circle. Wird ein Objekt dieser Klasse mit


Dim meinKreis As New Circle

erzeugt, verbergen sich hinter dem Erstellungsprozess zwei Schritte.

gp  Es wird der erforderliche Speicher für die Daten des Objekts reserviert.
gp  Es wird ein Konstruktor aufgerufen, der das Objekt initialisiert.

Ein Blick in die aktuelle Implementierung der Klasse Circle wirft die Frage auf, wo der Konstruktor zu finden ist, der für die Initialisierung verantwortlich ist. Die Antwort ist einfach: Die augenblickliche Klassenimplementierung enthält zwar explizit keinen Konstruktor, er existiert aber dennoch, allerdings implizit. Diesen Konstruktor, der parameterlos ist, bezeichnet man auch als Standardkonstruktor. Der Standardkonstruktor ist grundsätzlich immer vorhanden – zumindest solange wir keinen parametrisierten definieren. Davon später mehr.

Um nach der Instanziierung dem Circle-Objekt individuelle Daten zuzuweisen, muss der Benutzer der Klasse jede Eigenschaft einzeln aufrufen, z.  B.:


With meinKreis
.Radius = 10
.XKoordinate = 20
.YKoordinate = 20
End With

Wäre es nicht sinnvoller, einem Circle-Objekt schon bei dessen Instanziierung den Radius mitzuteilen, vielleicht sogar auch noch optional gleichzeitig die Mittelpunktskoordinaten? Genau diese Aufgabe können entsprechend parametrisierte Konstruktoren übernehmen, denn Konstruktoren dürfen nach nahezu denselben Regeln wie andere Methoden überladen werden.

Das Beispiel der Circle-Klasse wollen wir nun so ergänzen, dass bei der Instanziierung unter drei Erstellungsoptionen ausgewählt werden kann:

gp  Ein Circle-Objekt kann wie bisher ohne Übergabe von Initialisierungsdaten erzeugt werden.
gp  Einem Circle-Objekt kann bei der Instanziierung sein Radius übergeben werden.
gp  Bei der Instanziierung können sowohl der Radius als auch die Lage des Mittelpunktes festgelegt werden.

Der Code der Circle-Klasse kann zur Erfüllung der Forderungen wie folgt ergänzt werden:


Public Sub New()
End Sub
Public Sub New(ByVal radius As Double)
Me.Radius = radius
End Sub
Public Sub New(ByVal radius As Double, ByVal x As Integer, _
ByVal y As Integer)
Me.Radius = radius
intXKoordinate = x
intYKoordinate = y
End Sub

Den beiden parametrisierten Konstruktoren wird als Argument der Radius des zu konstruierenden Objekts übergeben. Dabei wurde berücksichtigt, dass der Benutzer einen unzulässigen negativen Radius festlegen könnte. Dem Feld dblRadius wird daher nicht direkt der Inhalt des Parameters radius übergeben, sondern der Eigenschaftsmethode Radius, welche die Zulässigkeit prüft und gegebenenfalls abweist.

Da Visual Basic keinen Unterschied zwischen den Bezeichnern radius und Radius macht, ist es notwendig, mit der Me-Referenz die Eigenschaftsmethode eindeutig zu adressieren.


Galileo Computing

4.5.2 Die Konstruktoraufrufe  downtop

Im Allgemeinen werden Konstruktoren dazu benutzt, den Feldern eines Objekts bestimmte Startwerte zuzuweisen. Um ein Circle-Objekt zu erzeugen, stehen mit der obigen Konstruktorüberladung drei Möglichkeiten zur Verfügung:

gp  Es wird ein Kreis ohne die Übergabe eines Arguments erzeugt. Dabei wird der parameterlose Konstruktor aufgerufen:
Dim meinKreis As Circle = New Circle()
Der Kreis hat in diesem Fall den Radius 0, die Mittelpunktskoordinaten werden ebenfalls mit 0 initialisiert.
gp  Ein neuer Kreis wird nur mit dem Radius definiert, z.  B.:
Dim meinKreis As Circle = New Circle(10)
Es wird der Konstruktor aufgerufen, der ein Argument entgegennehmen kann. Da den Mittelpunktkoordinaten kein expliziter Wert zugewiesen wird, enthalten die entsprechenden Instanzvariablen intXKoordinate und intYKoordinate nur die standardmäßigen Initialisierungswerte 0.
gp  Einem Kreis werden bei der Erzeugung sowohl der Radius (im Beispiel unten 10) als auch die Mittelpunktkoordinaten (im Beispiel unten x = 15 und y = 20) übergeben.
Dim meinKreis As Circle = New Circle(10, 15, 20)

Bei der Instanziierung einer Klasse muss der VB-Compiler selbst herausfinden, welcher Konstruktor aufgerufen werden soll. Dazu werden die Typen der übergebenen Argumente mit denen der Konstruktoren verglichen. Liegt Doppeldeutigkeit vor oder können die Argumente nicht zugeordnet werden, löst der Compiler einen Fehler aus.


Galileo Computing

4.5.3 Definition von Konstruktoren  downtop

Trotz der Ähnlichkeit zwischen Konstruktoren und Methoden unterliegen Konstruktoren bestimmten, teilweise auch abweichenden Regeln:

gp  Die Bezeichner der Konstruktoren lauten immer New.
gp  Konstruktoren haben grundsätzlich keinen Rückgabewert.
gp  Die Parameterliste eines Konstruktors ist beliebig.
gp  Der Konstruktor einer Klasse wird bei der Instanziierung mit dem Schlüsselwort New aufgerufen.
gp  Ein Konstruktor kann nicht auf ein bereits bestehendes Objekt aufgerufen werden, beispielsweise um Instanzvariablen andere Werte zuzuweisen.

Entwickeln Sie in einer konstruktorlosen Klasse, wird bei der Erzeugung eines Objekts ein impliziter, parameterloser Standardkonstruktor ausgeführt. Nun folgt noch eine weitere sehr wichtige Regel:


Der implizite Standardkonstruktor existiert nur dann, wenn er nicht durch einen parameterlosen Konstruktor explizit überschrieben oder durch einen parametrisierten überladen wird.


Implementieren Sie nur einen einzigen parametrisierten Konstruktor, enthält die Klasse keinen impliziten Standardkonstruktor mehr. Wird er dennoch benötigt, muss er codiert werden – so wie im Beispiel der Klasse Circle. Ohne den parameterlosen Konstruktor ist es nicht möglich, ein Objekt dieser Klasse ohne die gleichzeitige Übergabe einer Argumentliste zu erzeugen. Aus diesem Grund haben wir auch in Circle einen parameterlosen Konstruktor definiert, obwohl er keinen Code enthält. Wir entsprechen damit unserer selbst auferlegten Forderung nach der Instanziierung eines Circle-Objekts ohne Parameterübergabe.

Eine herausragende Bedeutung spielt der parameterlose Konstruktor in der Vererbung. Nehmen Sie die Aussage, dass in jeder vererbungsfähigen Klasse ein parameterloser Konstruktor definiert werden sollte, derzeit noch als eine notwendige Tatsache hin. Wir werden dieses Thema in Kapitel 6 noch einmal aufgreifen.


Galileo Computing

4.5.4 »Friend«-Konstruktoren  downtop

Public deklarierte Konstruktoren stehen allen Benutzern der Klasse zur Verfügung. Eine fremde Anwendung kann die öffentlichen Konstruktoren dazu benutzen, ein Objekt nach den Maßstäben, die in der Parameterliste des Konstruktors festgelegt sind, zu erzeugen.

Unter Umständen ist es wünschenswert, eine Klasse nicht allen Anwendungen offen zu legen und den Zugriff nur auf die aktuelle Assembly zu beschränken. Mit dem Zugriffsmodifizierer Friend können Sie eine solche Einschränkung erzwingen.


Galileo Computing

4.5.5 »Private«-Konstruktoren  downtop

Sie werden immer wieder Klassen entwickeln, die nicht instanziiert werden dürfen. Dazu gehören zum Beispiel Klassen, die ausnahmslos statische Methoden zur Verfügung stellen, die unter der Angabe des Klassennamens und nicht auf eine Objektreferenz aufgerufen werden.

Um die Instanziierung zu unterbinden, muss der parameterlose Konstruktor, der standardmäßig öffentlich ist, mit einem Private-Zugriffsmodifizierer überschrieben werden.


Public Class MathLib
Private Sub New()
End Sub
...
End Class

Damit wird verhindert, dass der Compiler den öffentlichen Standardkonstruktor generiert, und die Klasse MathLib ist nicht instanziierbar. Parametrisierte Konstruktoren in nicht instanziierbaren Klassen zu definieren, macht keinen Sinn.


Galileo Computing

4.5.6 Konstruktorverkettung  downtop

Konstruktoren können wie Methoden überladen werden. Jeder Konstruktor enthält dabei typischerweise eine aufgrund der ihm übergebenen Argumente spezifische Implementierung. Manchmal kommt es vor, dass der Konstruktor einer Klasse Programmcode enthält, der von einem zweiten Konstruktor ebenfalls implementiert werden muss. Sehen wir uns dazu die beiden parametrisierten Konstruktoren der Klasse Circle an:


Public Sub New(ByVal radius As Double)
Me.Radius = radius
End Sub
Public Sub New(ByVal radius As Double, ByVal x As Integer, _
ByVal y As Integer)
Me.Radius = radius
intXKoordinate = x
intYKoordinate = y
End Sub

Es fällt auf, dass in beiden der Radius des Circle-Objekts festgelegt wird. Es liegt nahe, zur Vereinfachung den einparametrigen Konstruktor aus dem dreiparametrigen heraus aufzurufen. Das können Sie als erste Anweisung im betreffenden Konstruktor durch New mit passender Parameterweiterleitung erreichen.


Public Sub New(ByVal radius As Double)
Me.Radius = radius
End Sub
Public Sub New(ByVal radius As Double, ByVal x As Integer, _
ByVal y As Integer)
Me.New(radius)
intXKoordinate = x
intYKoordinate = y
End Sub

Eine Konstruktoraufrufverkettung darf auch über mehrere Konstruktoren hinweg erfolgen und muss nicht zwangsläufig in Richtung zu den Konstruktoren mit einer geringeren Anzahl von Parametern erfolgen. Es kann durchaus ein zweiparametriger Konstruktor den drei- oder vierparametrigen derselben Klasse aufrufen. Allerdings muss die umleitende Anweisung immer die erste innerhalb des Anweisungsblocks des Konstruktors sein.


Galileo Computing

4.5.7 Zusammenfassung  toptop

gp  Konstruktoren sind Methoden, die aufgerufen werden, sobald eine Klasse instanziiert wird. Sie dienen der Initialisierung des Objekts.
gp  In Visual Basic werden Konstruktoren in den Klassen als Routinen mit dem Bezeichner New implementiert. Konstruktoren haben keinen Rückgabewert.
gp  Wird in einer Klassendefinition nicht explizit ein Konstruktor definiert, stellt das System standardmäßig einen parameterlosen bereit, um eine einfache Instanziierung zu gewährleisten.
gp  Der implizite Standardkonstruktor existiert nur dann, wenn er nicht durch andere, parametrisierte Konstruktoren überladen wird. Enthält eine Klasse parametrisierte Konstruktoren und wird gleichzeitig ein parameterloser benötigt, muss er ausdrücklich definiert werden. Jede Klasse, aus der weitere Klassen abgeleitet werden können, sollten einen parameterlosen Konstruktor enthalten.
gp  Ein Konstruktor kann nur durch die Zugriffsmodifizierer Public, Private und Friend beschrieben werden. Wird der parameterlose Konstruktor Private überschrieben, ohne einen weiteren öffentlich zu definieren, ist die Klasse nicht instanziierbar.
gp  Um aus einem Konstruktor heraus einen anderen desselben Objekts aufzurufen, wird der aufzurufende Konstruktor mit New unter Übergabe der Parameter ausgeführt. Diese Anweisung ist immer die erste im Anweisungsblock des Konstruktors.
 <<   zurück
  
  Zum Katalog
Zum Katalog: Visual Basic 2005
Visual Basic 2005
bestellen
 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchtipps
Zum Katalog: Visual C# 2005






 Visual C# 2005


Zum Katalog: Fortgeschrittene Programmierung mit Visual C# 2005






 Fortgeschrittene
 Programmierung
 mit Visual C# 2005


Zum Katalog: Das Programmierhandbuch SQL Server 2005






 Das Programmier-
 handbuch
 SQL Server 2005


Zum Katalog: Einstieg in Visual Basic 2005






 Einstieg in
 Visual Basic 2005


Zum Katalog: Einstieg in Visual C# 2005






 Einstieg in
 Visual C# 2005


Zum Katalog: Konzepte und Lösungen für Microsoft-Netzwerke






 Konzepte und
 Lösungen für
 Microsoft-Netzwerke


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo








Copyright © Galileo Press 2007
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Galileo Computing]

Galileo Press, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de